package start.spring.basic.job.service;

import javax.sql.DataSource;

import com.baomidou.mybatisplus.core.metadata.IPage;

import start.spring.basic.dynamic.DynamicRedisDAO;
import start.spring.basic.dynamic.SpringJdbc;
import start.spring.basic.page.PageQuery;
import start.spring.basic.page.PageResult;
import start.spring.basic.util.PageUtil;

/**
 * ****************************************************************************
 * 业务操作层基类接口，提供公共的service层操作方法
 *
 * @author(作者)：xuyongyun
 * @date(创建日期)：2020年4月9日 
 * 
 * *****************************************************************************
 */
public interface IBaseService {

    /**
     * 构造mybatis plus分页参数对象
     *
     * @param pageQuery
     * @return
     * @since 1.0
     */
    <T> IPage<T> getPage(PageQuery pageQuery);

    /**
     * 把mybatis plus分页结果转换成系统公共的分页结果
     *
     * @param page
     * @return
     * @since 1.0
     */
    <T> PageResult<T> getPageResult(IPage<T> page);

    /**
     * 把PageUtil分页结果转换成系统公共的分页结果
     *
     * @param page
     * @return
     * @since 1.0
     */
    <T> PageResult<T> getPageResult(PageUtil<T> page);

    /**
     * 根据查询参数获取PageUtil分页对象
     *
     * @param pageQuery
     * @return
     * @since 1.0
     */
    <T> PageUtil<T> getPageUtil(PageQuery pageQuery);

    /**
     * 获取系统的redis操作类
     *
     * @return
     * @since 1.0
     */
    DynamicRedisDAO getRedis();

    /**
     * 获取指定数据源
     *
     * @param dsKey 数据源唯一标志
     * @return
     * @since 1.0
     */
    DataSource getDs(String dsKey);
    
    /**
     * 获取当前数据库操作对象
     * 
     * @return
     * @since           1.0
     */
    SpringJdbc getDao();
    
}
